Add gtk_cell_renderer_get_state()
authorCarlos Garnacho <carlosg@gnome.org>
Sun, 23 Jan 2011 13:12:36 +0000 (14:12 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Thu, 27 Jan 2011 18:32:07 +0000 (19:32 +0100)
This is a helper function to help retrieve a GtkStateFlags
from a GtkCellRendererState, also given the cell renderer
and widget sensitivities.

docs/reference/gtk/gtk3-sections.txt
gtk/gtk.symbols
gtk/gtkcellrenderer.c
gtk/gtkcellrenderer.h

index 5bc549854839151c9af1c947492605709be0c7a4..1da47e2ba4c23d556c7056d80350e4988cda23df 100644 (file)
@@ -4557,6 +4557,7 @@ gtk_cell_renderer_get_alignment
 gtk_cell_renderer_set_alignment
 gtk_cell_renderer_get_padding
 gtk_cell_renderer_set_padding
+gtk_cell_renderer_get_state
 gtk_cell_renderer_is_activatable
 
 <SUBSECTION Width-for-height>
index 7070e3b988e81e89de587e8388b847b7d645777a..3d75c0deb05c687e5c38870f6e5aa43d77d9668c 100644 (file)
@@ -463,6 +463,7 @@ gtk_cell_renderer_get_preferred_width_for_height
 gtk_cell_renderer_get_request_mode
 gtk_cell_renderer_get_sensitive
 gtk_cell_renderer_get_size
+gtk_cell_renderer_get_state
 gtk_cell_renderer_get_type G_GNUC_CONST
 gtk_cell_renderer_get_visible
 gtk_cell_renderer_is_activatable
index 8a7cd76f9ec2a14b2414d66c4b34dd322668c374..1f50a59def7fc92e20a56a255a47aaeb82fc5481 100644 (file)
@@ -1663,3 +1663,48 @@ gtk_cell_renderer_get_aligned_area (GtkCellRenderer      *cell,
   g_assert ((aligned_area->x - cell_area->x) + aligned_area->width <= cell_area->width);
   g_assert ((aligned_area->y - cell_area->y) + aligned_area->height <= cell_area->height);
 }
+
+/**
+ * gtk_cell_renderer_get_state:
+ * @cell: a #GtkCellRenderer, or %NULL
+ * @widget: a #GtkWidget, or %NULL
+ * @cell_state: cell renderer state
+ *
+ * Translates the cell renderer state to a #GtkStateFlags,
+ * based on the cell renderer and widget sensitivity, and
+ * the given #GtkCellRendererState
+ *
+ * Returns: the widget state flags applying to @cell
+ *
+ * Since: 3.0
+ **/
+GtkStateFlags
+gtk_cell_renderer_get_state (GtkCellRenderer      *cell,
+                            GtkWidget            *widget,
+                            GtkCellRendererState  cell_state)
+{
+  GtkStateFlags state = 0;
+
+  g_return_val_if_fail (!cell || GTK_IS_CELL_RENDERER (cell), 0);
+  g_return_val_if_fail (!widget || GTK_IS_WIDGET (widget), 0);
+
+  if ((widget && !gtk_widget_get_sensitive (widget)) ||
+      (cell && !gtk_cell_renderer_get_sensitive (cell)))
+    state |= GTK_STATE_FLAG_INSENSITIVE;
+  else
+    {
+      if ((cell_state & GTK_CELL_RENDERER_SELECTED) != 0)
+        {
+          state |= GTK_STATE_FLAG_SELECTED;
+
+          if ((widget && gtk_widget_has_focus (widget)) &&
+              (cell_state & GTK_CELL_RENDERER_FOCUSED) != 0)
+            state |= GTK_STATE_FLAG_FOCUSED;
+        }
+
+      if ((cell_state & GTK_CELL_RENDERER_PRELIT) != 0)
+        state |= GTK_STATE_FLAG_PRELIGHT;
+    }
+
+  return state;
+}
index 22e86379cffa15e5d6abc5af8902d09e2f92cc9e..8ae77f677b235f78c05b33541690967f5150d661 100644 (file)
@@ -262,6 +262,10 @@ void            _gtk_cell_renderer_calc_offset    (GtkCellRenderer      *cell,
                                                    gint                 *x_offset,
                                                    gint                 *y_offset);
 
+GtkStateFlags   gtk_cell_renderer_get_state       (GtkCellRenderer      *cell,
+                                                   GtkWidget            *widget,
+                                                   GtkCellRendererState  cell_state);
+
 G_END_DECLS
 
 #endif /* __GTK_CELL_RENDERER_H__ */